﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Threading;

namespace AGPR.Locadora.Utils
{
    /// <summary>
    /// Classe de Formatação
    /// </summary>
    public static class Format
    {
        #region formatarCPF

        /// <summary>
        /// Retorna um CPF formatado
        /// </summary>
        /// <param name="str">CPF</param>
        /// <returns>CPF Formatado</returns>
        public static string formatarCPF(object str)
        {
            string cpf = Convert.ToString(str);
            return Regex.Replace(cpf, "(\\d{3})(\\d{3})(\\d{3})(\\d{2})", "$1.$2.$3-$4");
        }

        #endregion

        #region formatarCEP

        /// <summary>
        /// Retorna um CEP formatado
        /// </summary>
        /// <param name="str">CEP</param>
        /// <returns>CEP Formatado</returns>
        public static string formatarCEP(string str)
        {
            return Regex.Replace(str, "(\\d{5})(\\D+)?", "$1-");
        }

        #endregion

        #region formatarDinheiro

        /// <summary>
        /// Retorna um valor em dinheiro formatado
        /// </summary>
        /// <param name="dinheiro">Valor</param>
        /// <param name="moeda">Moeda</param>
        /// <returns>Valor formatado</returns>
        public static string formatarDinheiro(object dinheiro, string moeda = "R$")
        {
            string
            dim = Convert.ToString(dinheiro);
            dim = Regex.Replace(dim, "(\\d{1,3})(\\d{3,})", "$1.$2");
            dim = moeda + " " + dim;

            return dim;
        }

        #endregion

        #region limparNumero

        /// <summary>
        /// Limpa caracteres não númericas
        /// </summary>
        /// <param name="str">String</param>
        /// <returns>String sem números</returns>
        public static string limparNumero(string str)
        {
            return Regex.Replace(str, "\\D+", "");
        }

        #endregion

        #region limparDecimal

        /// <summary>
        /// Retorna uma string no formato decimal
        /// </summary>
        /// <param name="str">Valor</param>
        /// <returns>Decimal</returns>
        public static decimal limparDecimal(string str)
        {
            str = Regex.Replace(str, "^\\D+", "");
            decimal valor = Convert.ToDecimal(str);

            return valor;
        }

        #endregion

        #region limparSQL

        /// <summary>
        /// Retorna uma string limpa de tentativas de injeção SQL
        /// </summary>
        /// <param name="sql">SQL</param>
        /// <returns>SQL</returns>
        public static string limparSQL(string sql)
        {
            sql = sql
                .Replace("'", "''")
                .Replace("\"", "\\\"")
                .Replace("\\", @"\\");
            
            return sql;
        }

        #endregion

        #region toBoolean

        /// <summary>
        /// Converte uma entrada em Boleano, verifica se o valor é igual a "on"
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool toBoolean(object input)
        {
            dynamic boo = input;

            if (input != null)
            {
                string tipo = Convert.ToString(input.GetType());

                if ("System.String" == tipo)
                {
                    string inputTxt = Convert.ToString(input);
                    boo = (inputTxt == "on") ? true : false;
                }
            }

            return Convert.ToBoolean(boo);
        }

        #endregion
    }
}
